使用 new 来创建动态数组
通常对于大型数据(如数组、字符串和结构)应使用new。
在创建数组时,指定长度;在编译时给数组分配内存被称为静态联编。(不管用不用,都会占用内存)
使用new时,如果在运行阶段需要数组,则创建它;如果不需要,则不创建。还可以在程序运行时选择数组的长度。这被称为动态联编。意味着数组是在程序运行时创建的。这种数组叫做动态数组。在运行时确定数组的长度。
int* p = new int[10]; // new运算符返回第一个元素的地址。
delete [] p; // 释放整个数组,new如果带[] 则delete也需要带[]
使用new和delete时,应遵守以下规则
● 不要使用delete来释放不是new分配的内存
● 不是使用delete释放同一个内存块两次
● 如果使用new[]为数组分配内存,则应使用delete[]来释放。
● 如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。
● 对空指针应用delete是安全的
使用动态数组
把指针当作数组名使用
int main()
{
using namespace std;
int* p = new int[3]; // new运算符返回第一个元素的地址。
p[0] = 10;
p[1] = 9;
p[2] = 8;
for (int i = 0; i < 3; i++) {
cout << p[i] << endl;
}
*p = 20;
*(p+1) = 19;
*(p+2) = 18;
for (int i = 0; i < 3; i++) {
cout << p[i] << endl;
}
*p = 30;
*(++p) = 29;
*(++p) = 28;
p-=2; // 需要提供delete正确的地址
for (int i = 0; i < 3; i++) {
cout << p[i] << endl;
}
delete [] p; // 释放整个数组,new如果带[] 则delete也需要带[]
return 0;
}
🔚